Засоби мови програмування Паскаль для розв`язування математичних задач

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Міністерство освіти РФ
Тульський державний університет
Кафедра автоматики і телемеханіки
Контрольно-курсова робота
з курсу "інформатика"
Варіант № 15
Виконав:
студент групи 220611
Блінцов С. В.
Перевірив:
асистент кафедри АТМ
Середін О. С.
Тула 2001

Зміст

1.
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
2.
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
3.
3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8
Введення ................................................. .................................................. .
Обчислення значення інтеграла функції, заданої графічно ... ...

Постановка завдання ................................... ... ... ... ... ... ... ... ... ... ... ... .... .

Математичне формулювання задачі ............................................... ..
Чисельний метод рішення ............................................... ......................
Інструкція програмісту ................................................ .....................
Схема алгоритму ................................................ .......................................
Текст програми ................................................ .....................................
Інструкція користувачеві ................................................ ......................
Тестовий приклад ................................................ ....................................
Складання таблиці значень функції, заданої у вигляді розкладу в ряд ....................................... ..............................................

Постановка завдання ................................................ ............... ... ... ... ... ... ..

Математичне формулювання задачі ............................................... ....
Чисельний метод рішення ............................................... ........................ Інструкція програмісту ................................................ .......................
Схема алгоритму ................................................ ........................................
Текст програми ................................................ .......................................
Інструкція користувачеві ................................................ ........................
Тестовий приклад ................................................ .......................................
Робота з матрицями ............................................... ....................................

Постановка завдання ................................................ ... ... ... ... ... ... ... ... ... ..

Математичне формулювання задачі ............................................... ....
Чисельний метод рішення ............................................... ........................ Інструкція програмісту ................................................ .......................
Схема алгоритму ................................................ ........................................
Текст програми ................................................ .......................................
Інструкція користувачеві ................................................ ........................
Тестовий приклад ................................................ .......................................
Висновок ................................................. .................................................. .......
4
5
5
6
7
9
10
10
13
13
16
16
17
17
18
19
22
22
22
26
26
28
28
28
29
32
35
36
37

Введення
У даній контрольно-курсової роботі потрібно застосувати вивчені засоби мови програмування Паскаль для розв'язування математичних завдань шляхом використання чисельних методів на комп'ютері.
Необхідно написати три програми, вирішальні поставлені завдання, використовуючи надані математичні обгрунтування. Рішення даних завдань показує можливості використання комп'ютера для різного роду прикладних обчислень.
У першій задачі потрібно розробити алгоритм і його реалізацію для знаходження інтеграла функції, заданої графічно. Цінність даного завдання полягає в тому, що не для кожної функції значення інтеграла можна знайти аналітично. Проте з використанням запропонованого чисельного методу, можливо, отримати конкретне значення з достатньою необхідною точністю.
У другій задачі необхідно скласти алгоритм і реалізацію даного алгоритму, який дозволить надрукувати таблицю значень функції, заданої у вигляді розкладу в ряд. Без використання комп'ютера процес обчислення значень такої функції займає досить тривалий час. Комп'ютер же дає можливість значно прискорити цей процес, що дозволяє, наприклад, простежити зміну значення функції на різних інтервалах, тобто при різних значеннях аргументу.
У третій завданню представлена ​​робота з приватним випадком багатовимірних масивів - матрицею. Використання матриць - дуже поширене явище в програмуванні. Це, наприклад, робота з перетворенням графіки, моделювання тривимірних об'єктів. У математиці матриці також часто використовуються в різних завданнях. Уміння працювати з ними - дуже важливо.

1. Обчислення значення інтеграла функції,
заданої графічно

1.1. Завдання та постановка задачі.

Завдання (варіант № 15):
Скласти програму на мові Turbo Pascal 7.0 обчислення значення інтегралу на інтервалі [a, b] для функції, заданої графічно. Значення інтеграла обчислити наближено по ітераційної формулою лівих прямокутників:
b
I = ò f (x) dx @ I n = h (f 1 + f 2 + ... + f n-1),
a
де h = (ba) / n - величина кроку між двома сусідніми точками розбиття інтервалу інтегрування; fi = f (xi) - значення функції в точці xi = a + h (i -1); i = 1, 2, ..., n .
Обчислення закінчити при виконанні умови | In - I2n | <e, де e> 0 - досить мале значення, що задається користувачем (точність обчислень). Тут In, I2n - значення інтеграла, обчислені за даною формулою при кількості розбиття на n і 2n відповідно.
Чисельні значення всіх величин, що беруть участь в обчисленнях, вважати параметрами програми і визначити їх шляхом введення.

Y
X
c
-C
30 °
y = lg x
Графік функції:
Пояснення до завдання:
Аналізуючи графік функції можна зробити висновок, що для аналітичного завдання рівняння функції слід її розглядати на різних інтервалах:
  x <=-c Þ y = kx + b
-C <x <= c Þ y = Ln (c)
c <x Þ y = lg (x),
де kx + b =, lg x = (ln (x)) / (ln (10));
x - аргумент функції; y - її значення; c - параметр функції (c> 0), що вводяться користувачем з клавіатури.
1.2 Математичне формулювання задачі.
Вирішення багатьох завдань (наприклад, визначення шляху при нерівномірному русі, роботи змінної сили, витрат води в річках і каналах, площі поперечного перерізу судна) знаходиться за допомогою визначеного інтеграла. Іноді для обчислення визначеного інтеграла від неперервної на відрізку [a; b] функції f (x) можна просто скористатися формулою Ньютона-Лейбніца:
  b
S = ò f (x) dx = F (b) - F (a),
a
де F (x) - первообразная для функції f (x) [F ¢ (x) = f (x)].
Однак скористатися формулою Ньютона-Лейбніца в більшості ситуацій не представляється можливим.
У цьому випадку використовуються наближені методи для обчислення визначеного інтеграла. Всі вони засновані на тому, що геометрично інтеграл функції f (x) в межах від a до b представляє собою площу криволінійної трапеції, обмеженої графіком цієї функції, віссю Ox і прямими x = a, x = b. Розглянемо один з цих методів.

1.3 Чисельний метод рішення.

Нехай потрібно наближено обчислити площу фігури, обмеженої графіком функції f (x) і прямими x = a, x = b, y = 0.
Ідея алгоритму обчислення площі криволінійної трапеції полягає в наступному:
Розіб'ємо відрізок [a; b] на n рівних відрізків точками a = x 0 <x 1 <x 2 <... <xn -1 <xn = b і на кожному з отриманих відрізків побудуємо прямокутник, стороною якого буде відрізок [xi, xi +1], а інший - відрізок, довжина якого дорівнює f (xi). Цей випадок показаний на малюнку 2.
Площа криволінійної трапеції можна наближено вважати рівною сумі площ заштрихованих прямокутників.
Ясно, що якщо збільшувати число відрізків [xi, xi +1], тобто відрізок
[A; b] розбивати на більше число рівних відрізків, то сума їх площ все з більшою точністю буде збігатися з площею криволінійної трапеції. Значить, точність обчислення площі криволінійної трапеції визначається величиною числа n.
Площа кожного прямокутника можна обчислити так. Одна зі сторін прямокутника, побудованого на відрізку [xi, xi +1], дорівнює h = (b - a) / n, а друга - f (xi). Тому площа «лівого» прямокутника дорівнює s = h * f (xi) = (b - a) / n * f (xi). Тоді площа криволінійної трапеції дорівнює сумі площ всіх прямокутників:
S = (b - a) / n * f (x 0) + (b - a) / n * f (x 1) + ... + (b - a) / n * f (xn-1) = (b - a) / n * (f (x0) + f (x1) + ... + f (xn-1)).
Таким чином, ми знайшли інтеграл функції f (x) на відрізку [a; b] при числі розбиття відрізка n. Очевидно, що чим більше n, тим більше точність обчислення значення інтеграла, однак, при цьому час, що витрачається на вирішення задачі, також прямо пропорційно числу n. Звідси виникає питання: як правильно вибрати значення числа n, щоб за найменший час знайти значення шуканого інтеграла з гранично допустимої точністю?
Нехай ми знаємо, що при розбитті відрізка інтегрування на n частин інтеграл функції цьому інтервалі дорівнює Integral1. Тоді ми можемо також знайти значення інтеграла при числі розбиття відрізка, що дорівнює 2n, і це значення буде дорівнювати деякому числу Integral2. Очевидно, що оцінкою точності обчислень буде величина абсолютної похибки | Integral1 - Integral2 |. Але в такому разі, саме величина абсолютної похибки і є той критерій, який показує, чи слід далі продовжувати обчислення або знайдене значення інтеграла вже задовольняє гранично допустимого рівня похибки в поставленому завданню.
Тоді алгоритм вирішення задачі полягає в наступному:
Спочатку обчислюється значення інтеграла при n розбиття відрізка інтегрування (Integral1). Потім число розбиття n збільшується в 2 рази і обчислюється значення інтеграла при новому числі розбиття (Integral2). Після цього перевіряється умова завершення роботи (| Integral1 - Integral2 | <e) і, якщо роботу слід продовжувати, то поточне значення Integral2 присвоюється значенню Integral1, число розбиття n збільшується в 2 рази, а значення Integral2 обчислюється заново і так далі, поки не буде виконана умова | Integral1 - Integral2 | <e.
Тепер невирішеним залишилося тільки питання про вибір початкового значення числа n. Очевидно, що це питання не можна вирішити однозначно і однаково для всіх видів функцій. Це стане очевидно, якщо розглянути таку ситуацію: нехай потрібно знайти певний інтеграл деякої функції на відрізку, де вона бере деякий однакове значення не менше 2-х разів, і при цьому її інтеграл не дорівнює добутку значення на довжину відрізка інтегрування. При некоректному виборі вихідного значення n може вийти так, що при розбитті відрізка інтегрування на n і 2n в розгляд будуть прийняті тільки ті точки, значення функції в яких збігаються. Але тоді обчислення інтеграла закінчаться, тому що різниця між знайденими значеннями (Integral1 - Integral2) буде дорівнює нулю і, отже, явно менше будь-якої похибки, значення якої завжди позитивно. Але це неприпустимо, тому що реальне значення шуканого інтеграла може бути далеко від знайденого. Тому, при розгляді кожної нової функції слід виробляти ретельний аналіз та виключення подібних ситуацій. Таким чином, питання про вибір початкового значення числа розбиття відрізка залишається відкритим.
Оскільки розглянута в даній задачі функція не представляє особливої ​​складності, то в запропонованому далі алгоритмі рішення задачі початкове значення числа n буде взято рівним одиниці.
1.4 Опис змінних.
Ім'я змінної
Тип змінної
Значення
N
integer
Число інтервалів розбиття
A
real
Нижня межа інтегрування
B
real
Верхня межа інтегрування
З
real
Параметр функції, визначений користувачем
H
real
Крок інтегрування
E
real
Точність обчислень
X
real
Аргумент функції
integral1
real
Значення інтеграла при n розбиття
integral2
real
Значення інтеграла при 2n розбиття
1.5 Схема алгоритму.
1.6 Текст програми.
PROGRAM KKP2_1_DUB3;
USES CRT;
var
A, B, C, E, ABS_Integral: real;
PROCEDURE ENTER_DATA (VAR PR_1, PR_2, P_PAR, POGR_PRO: REAL);
BEGIN
ClrScr;
Writeln ('Програма для знаходження значення інтеграла на певному проміжку');
Writeln;
writeln ('Введіть кордону інтервалу [A, B], причому (A <B), число C (0 <C <1) і точність E (E> 0):');
writeln;
REPEAT
BEGIN
writeln ('Кількість C:'); readln (P_PAR);
if not (P_PAR> 0) then
writeln ('C повинно бути більше 0!. Повторіть введення.')
ELSE IF NOT (P_PAR <1) THEN
WRITELN ('C повинно бути менше 1!. Повторіть введення.');
END;
UNTIL ((P_PAR> 0) AND (P_PAR <1));
REPEAT
BEGIN
writeln ('Початок інтервалу A:'); readln (PR_1);
writeln ('Кінець інтервалу B:'); readln (PR_2);
if not (PR_1 <PR_2) then
writeln ('A повинно бути менше B!. Повторіть введення.');
END;
UNTIL (PR_1 <PR_2);
REPEAT
BEGIN
writeln ('Точність E:'); readln (POGR_PRO);
if not (POGR_PRO> 0) then
writeln ('E повинно бути більше 0!. Повторіть введення.');
END;
UNTIL (POGR_PRO> 0);
END;
FUNCTION integration (VAR GR_1, GR_2, F_PAR, POGR_FUNC: REAL): real;
VAR
INTEGRAL1, INTEGRAL2, X, H: REAL;
N: INTEGER;
READY: BOOLEAN;
begin
integral1: = 0;
integral2: = 0;
n: = 1;
REPEAT
N: = N * 2;
H: = (GR_2-GR_1) / N;
X: = GR_1;
Integral2: = 0;
repeat
if x <= (-F_PAR) then
integral2: = integral2 + ((1/sqr (3)) * (ln (F_PAR)-F_PAR))
ELSE IF ((-F_PAR <x) and (x <= F_PAR))
THEN integral2: = integral2 + ln (F_PAR)
ELSE if (X> F_PAR) THEN
Integral2: = integral2 + LN (X) / LN (10);
X: = X + H;
until not (X <= B);
READY: = abs (integral1-integral2) <POGR_FUNC;
INTEGRAL1: = INTEGRAL2;
UNTIL READY;
INTEGRATION: = INTEGRAL2;
END;
BEGIN
ENTER_DATA (A, B, C, E);
ABS_Integral: = INTEGRATION (A, B, C, E);
Writeln;
Writeln ('Відповідь:');
writeln ('Інтеграл на проміжку від', A: 0:2, 'до', B: 0:2, 'дорівнює');
writeln (ABS_Integral: 1:3, 'з точністю', E: 1:3);
ReadKey;
END.
1.7 Інструкція користувачеві.
Дана програма обчислює значення інтеграла функції заданої графічно. Інтервал інтегрування, точність обчислень і параметр функції вводяться користувачем. Програма вирахує результат і видасть його (в числовому вигляді) на екран монітора.
Після запуску програми на екрані з'явиться опис програми.
У відповідь на запрошення до введення значень слід ввести необхідні величини. Програма не претендує на універсальність, тому не варто вводити позамежні кордону інтервалу або дуже маленьку (~ 0.001) точність обчислень. Оскільки швидкість виконання цієї програми безпосередньо залежить від частоти процесора, то на процесорах, що розрізняються значно, час обчислень (і допустима точність) будуть різними. У загальному випадку це визначається досвідченим шляхом.
Якщо всі величини задані коректно і обчислення не переривалися, то через деякий час, що залежить від тактової частоти процесора, програма складе значення інтеграла і видасть його на екран.
У разі якщо потрібно повторне обчислення значення, слід заново запустити програму.
1.8. Тестовий приклад.
Програма для знаходження значення інтеграла на певному проміжку
Введіть кордону інтервалу [A, B], причому (A <B), число C (0 <C <1), число D (D <0) і точність E (E> 0):
Число C:
0.9
Число D:
-0.1
Початок інтервалу A:
5
Кінець інтервалу B:
10
Точність E:
1
Відповідь:
Інтеграл на проміжку від A до B дорівнює
2.574 з точністю 1.000
Програма для знаходження значення інтеграла на певному проміжку
Введіть кордону інтервалу [A, B], причому (A <B), число C (0 <C <1), число D (D <0) і
точність E (E> 0):
Число C:
0.9
Число D:
-0.1
Початок інтервалу A:
-0.9
Кінець інтервалу B:
0.9
Точність E:
1
Відповідь:
Інтеграл на проміжку від A до B дорівнює
-0.300 З точністю 1.000

2. Складання таблиці значень функції, заданої у вигляді розкладу в ряд

2.1 Варіант завдання і постановка задачі.

Завдання (варіант № 15):
Розробити алгоритм та програму обчислення таблиці значень функції, заданої у вигляді розкладу в ряд. Значення функції обчислювати з точністю e> 0, тобто обчислення суми членів ряду необхідно припинити, коли абсолютна величина чергового члена ряду розкладання виявиться менше e: | а до | <e.
При обчисленні чергового члена доцільно скористатися Рекурентні виразом:
а к +1 = з к а к; к = 0, 1, 2, ...,
де а до - деякий до-й член ряду; а к +1 - наступний к +1-й член ряду; з до - коефіцієнт, що визначається номером до.
При складанні програми необхідно по можливості скористатися операторами організації циклів WHILE, REPEAT, FOR.
Межі інтервалу обчислень функцій a і b, величина кроку зміни аргументу h і точність обчислення функції e задаються при введенні. На друк виводяться номер за порядком, значення аргументу, відповідні йому, значення функції та номер члена ряду, на якому закінчився обчислення значення функції, у формі таблиці:

Х
f (x)
чл.р.
1
2
3
...
Функція:
2.2 Математичне формулювання задачі.
Деякі функції не можна уявити у вигляді кінцевої формули, але обчислення значень таких функцій часто буває необхідно для різного роду розрахунків. Такі функції можуть бути задані у вигляді розкладу в нескінченний ряд, де при нескінченному збільшенні членів ряду кожен наступний член менше попереднього. Кожен член ряду - це конкретне значення функції. Перебування таких членів і дає можливість обчислити значення функції. І чим більше членів ряду розглянути, тим більш точним вийде значення функції.

2.3 Чисельний метод рішення.

Нехай потрібно наближено обчислити значення функції, заданої у вигляді розкладу в нескінченний ряд. Ідея алгоритму обчислення суми членів ряду полягає в наступному:
Очевидно, що обчислення значення функції потрібно проводити за кінцеве число кроків. А отже, необхідний якийсь обмежуючий фактор, в якості якого в нашій задачі буде виступати похибка обчислень e (e> 0). Отже, обчисливши кожен новий член ряду ak, нам необхідно перевірити, чи не буде абсолютна величина чергового члена ряду менша, ніж величина похибки e, тобто | ak | <e. Якщо це нерівність не виповнилося, то слід обчислити новий член ряду, інакше можна закінчувати обчислення і виводити результат роботи на екран дисплея.
Крім того, при обчисленні чергового члена доцільно скористатися рекурентним виразом: ak +1 = ck * ak; k = 0, 1, 2, ..., де ak - деякий k-ий член ряду; ak +1 - наступний k +1- ий член ряду; ck - коефіцієнт, що визначається номером k.
У даному випадку знаходження коефіцієнта ck можна зробити наступним чином:
a k = ;
a k +1 = ;
c k =
Отже, знаючи значення попереднього члена ряду, порядковий номер наступного і використовуючи отриману формулу, ми значно спрощуємо знаходження нового члена нашого ряду:
a k +1 = a k * ; K = 0, 1, 2, ...
2.4 Опис змінних.
Ім'я змінної
Тип змінної
Значення

K

integer
Номер члена ряду
number
integer
Порядковий номер
A
real
Початок інтервалу
B
real
Кінець інтервалу
H
Крок інтервалу
E
Точність
X
Поточне значення аргументу
у
Значення члена ряду
f
Значення функції для поточного аргументу
2.5 Схема алгоритму.
початок
Блок-схема: знак завершення: початок 

                                                    
                                              Програма призначена для обчислення
таблиці значень функції,         
 

заданої у вигляді розкладу в ряд.


Введіть кордону інтервалу [A, B] (причому (A <B));
точність E (E> 0)
 

і крок зміни аргументу H (H> 0)
Початок інтервалу A:
A
Кінець інтервалу B:
B


A повинно бути менше B! Повторіть введення.
Блок-схема: документ: A повинно бути менше B! Повторіть введення.
not (A <B)
Блок-схема: рішення: not (A <B)                              ТАК        
                                      
                   НІ     
A <B
Блок-схема: рішення: A <B                           НІ
 

ТАК
 
Точність E:
E
not (E> 0)
E повинно бути більше 0!. Повторіть введення.
E> 0
Крок H:
H
not (H> 0)
H повинно бути більше 0!. Повторіть введення.
(H> 0)
Ви ввели:
'A =', A: 1:5, 'B =', B: 1:5, 'H =', H: 1:5, 'E =', E: 1:5
X: = A
number: = 0
 
k: = 0
y: = (cos (2 * x)) / 3
f: = 0
y: = y * cos (2 * (k +1) * x) * (2 * k-1) / ((2 * k +3) * cos (2 * k * x))
f: = f + y
abs (y) <E
inc (number)
inc (k)
 

немає
 

та
(Number mod 18) = 0
Блок-схема: рішення: (number mod 18) = 0
 

                                         немає           
'|', Number: 5 ,'|', X: 20:13, '|', (4/Pi) * (0.5-f): 16:13, '|', k: 7, '|'
X: = X + H
not (X <B)
Table_end
Table_begin
 

та

                           немає
кінець
Блок-схема: знак завершення: кінець
2.5.1 Схема алгоритму процедури Table_begin
початок
----------
Блок-схема: документ: ----------
 

| Номер | X | f (x) | Номер члена ряду |
----------
кінець
Блок-схема: документ: ----------
Блок-схема: знак завершення: кінець


2.5.2 Схема алгоритму процедури Table_end
початок
-----------------
кінець
Блок-схема: знак завершення: початок
Блок-схема: документ: -----------------
Блок-схема: знак завершення: кінець
 

2.6 Текст програми.
Program kkr1_2;
procedure Table_begin;
begin
writeln ('----------------------------------------------- -----------------------------------');
writeln ('| Номер | X | f (x) | Номер члена ряду |');
writeln ('----------------------------------------------- -----------------------------------');
end;
procedure Table_end;
begin
writeln ('----------------------------------------------- -----------------------------------');
end;
var
K, number: integer;
A, B, H, E, X, y, f: real;
begin
Writeln ('Програма призначена для обчислення таблиці значень функції,');
writeln ('заданої у вигляді розкладу в ряд.');
Writeln;
{------------------------------------------------- -----------------------}
{Введення даних}
writeln ('Введіть кордону інтервалу [A, B] (причому (A <B) ); точність E (E> 0)');
writeln ('і крок зміни аргументу H (H> 0)');
writeln;
repeat
begin
writeln ('Початок інтервалу A:'); readln (A);
writeln ('Кінець інтервалу B:'); readln (B);
if not (A <B) then writeln ('A повинно бути менше B!. Повторіть введення.');
end;
until (A <B);
repeat
begin
writeln ('Точність E:'); readln (E);
if not (E> 0) then writeln ('E повинно бути більше 0!. Повторіть введення.');
end;
until (E> 0);
repeat
begin
writeln ('Крок H:'); readln (H);
if not (H> 0) then writeln ('H повинно бути більше 0!. Повторіть введення.');
end;
until (H> 0);
{------------------------------------------------- -----------------------}
writeln ('Ви ввели:');
writeln ('A =', A: 1:5, 'B =', B: 1:5, 'H =', H: 1:5, 'E =', E: 1:5);
writeln;
{------------------------------------------------- -----------------------}
X: = A;
number: = 0;
Table_begin;
repeat
k: = 0;
y: = (cos (2 * x)) / 3;
f: = 0;
inc (number);
repeat
inc (k);
y: = y * cos (2 * (k +1) * x) * (2 * k-1) / ((2 * k +3) * cos (2 * k * x));
f: = f + y;
until (abs (y) <E);
if (number mod 18) = 0 then
begin
Table_end;
Table_begin;
end;
writeln ('|', number: 5 ,'|', X: 20:13, '|', (4/Pi) * (0.5-f): 16:13, '|', k: 7, '| ');
X: = X + H;
until not (X <B);
Table_end;
end.
2.7 Інструкція користувачеві.
Після запуску програми, вона повідомить, що призначена для складання таблиці значень функції на певному інтервалі і попросить ввести значення, необхідні для складання таблиці. До таких значень відносяться початок і кінець інтервалу, крок зміни аргументу, точність обчислень. Не варто вводити занадто великих значень (або занадто маленьку точність), так як тоді час роботи програми сильно збільшиться.
Щоб правильно скласти необхідну таблицю, програмою необхідні значення, які користувач введе в програму. Вводити значення треба після запрошення програми до відповідного дії. Важливий момент - якщо таблиця повністю не поміститися на екран, то після заповнення останнього рядка, що міститься на цьому екрані, програма попросить натиснути будь-яку клавішу і продовжити складання таблиці на чистому екрані, тобто попередньо очистивши попередню таблицю.
2.8. Тестовий приклад.
Програма призначена для обчислення таблиці значень функції,
заданої у вигляді розкладу в ряд.
Введіть кордону інтервалу [A, B] (причому (A <B) ); точність E (E> 0)
і крок зміни аргументу H (H> 0):
Початок інтервалу A:
0.5
Кінець інтервалу B:
7.6
Точність E:
.001
Крок H:
1
Ви ввели:
A = 0.50000 B = 7.60000 H = 1.00000 E = 0.00100
-------------------------------------------------- ----------------------------------------
| Номер | X | f (x) | Номер члена ряду |
-------------------------------------------------- ----------------------------------------
| 1 | 0.50000000000 | 0.70477448832 | 7 |
| 2 | 1.50000000000 | 0.57770993869 | 8 |
| 3 | 2.50000000000 | 0.71713212380 | 10 |
| 4 | 3.50000000000 | 0.66752823117 | 10 |
| 5 | 4.50000000000 | 0.59106729937 | 10 |
| 6 | 5.50000000000 | 0.72198206866 | 2 |
| 7 | 6.50000000000 | 0.60541986599 | 9 |
| 8 | 7.50000000000 | 0.61517755154 | 10 |
-------------------------------------------------- ----------------------------------------

3.Робота з матрицями

3.1 Варіант завдання і постановка задачі.

Завдання (варіант № 15):
Обчислити суму елементів матриці В (К, К), К £ 50, розташованих над двома діагоналями і під ними:
*
*


3.2 Математичне формулювання задачі.
Дана матриця являє собою квадратну матрицю розмірності K.
Щоб знайти суму елементів, що знаходяться над діагоналями, треба спочатку визначити, що розуміється під діагоналями і потім, виходячи з цього, шукати власне суму елементів.
3.3 Чисельний метод рішення.
Квадратна матриця, про яку йде мова, це ніщо інше, як двовимірний масив розмірності KxK. Необхідно визначити, суму яких елементів потрібно шукати. Для цього слід вказати, що діагоналями квадратної матриці є елементи, що позначаються як Matrix [i, j], Matrix [i +1, j +1], ... , Matrix [k, k] для головної діагоналі і Matrix [k, j] і елементи Matrix [k-1, j +1], ... , Matrix [1, j] для побічної діагоналі. Знаючи це слід просто "перебирати" всі елементи, що знаходяться над і під діагоналями - тобто змінювати вертикальну складову координати в залежності від "поточної" діагоналі.
3.4 Опис змінних.
Ім'я змінної
Тип змінної
Значення

Matrix

array [1 .. 50,1 .. 50] of integer
Матриця, що вводиться користувачем
i
byte
Лічильник циклу
(Для матриці)
j
byte
Лічильник циклу
(Для матриці)
K
byte
Розмірність матриці,
обумовлена ​​користувачем
sum
integer
Сума елементів
key
char
"Технічна" змінна, що дорівнює відповіді користувача

3.5 Схема алгоритму.
початок
 

Програма шукає суму елементів матриці,
знаходяться над і під її діагоналями.
Введіть розмірність матриці (K <= 50):
K
(K <= 1) or (K> 50)
 

                                                   та   
Така розмірність неможлива за умовою.
 

                                 немає      
Повторіть введення.
(K> 1) and (K <= 50)
Блок-схема: рішення: (K> 1) and (K <= 50)
 

                                                немає
                                                   
                                    та
i: = 1, K, 1
j: = 1, K, 1
Matrix [', i ,',', j,'] =
Matrix [i, j]
 
Ви ввели:
i: = 1, K, 1
j: = 1, K, 1
Matrix [i, j], ''
j: = 1, k, 1
j <= (k / 2)
 

немає
 

та
i: = (j-1), 1, 1
sum: = sum + Matrix [i, j]
i: = (j +1), k, 1
sum: = sum + Matrix [i, j]
j: = k, 1, 1
 

j> (k / 2)
Блок-схема: рішення: j> (k / 2) немає
 

та
i: = (kj), 1, 1
sum: = sum + Matrix [i, j]
i: = (k-j +2), k, 1
sum: = sum + Matrix [i, j]
sum ...; sum
кінець


3.6 Текст програми.
Program kkr1_3;
var
Matrix: array [1 .. 50,1 .. 50] of integer;
i, j, K: byte;
sum: integer;
key: char;
begin
Writeln ('Програма шукає суму елементів матриці, що знаходяться над і під її діагоналями.');
Writeln;
{------------------------------------------------- -----------------------}
{Визначення розмірності матриці}
repeat
Writeln ('Введіть розмірність матриці (K <= 50):');
readln (K);
if ((K <= 1) or (K> 50)) then
begin
writeln ('Така розмірність неможлива за умовою.');
writeln ('Повторіть ввід.');
end;
until ((K> 1) and (K <= 50));
{------------------------------------------------- -----------------------}
{Введення матриці}
writeln ('Введіть матрицю');
for i: = 1 to K do
for j: = 1 to K do
begin
write ('Matrix [', i ,',', j ,']=');
Readln (Matrix [i, j]);
end;
{------------------------------------------------- -----------------------}
{Висновок матриці}
Writeln ('Ви ввели:');
for i: = 1 to K do
begin
for j: = 1 to K do write (Matrix [i, j], '');
writeln;
end;
{------------------------------------------------- -----------------------}
{Обчислення суми елементів. Перший прохід}
Writeln;
for j: = 1 to k do
begin
if j <= (k / 2) then
begin
for i: = (j-1) downto 1 do sum: = sum + Matrix [i, j]
end
else
for i: = (j +1) to k do sum: = sum + Matrix [i, j];
end;
{------------------------------------------------- -----------------------}
{Обчислення суми елементів. Другий прохід}
for j: = k downto 1 do
begin
if j> (k / 2) then
begin
for i: = (kj) downto 1 do sum: = sum + Matrix [i, j];
end
else for i: = (k-j +2) to k do sum: = sum + Matrix [i, j];
end;
{------------------------------------------------- -----------------------}
{Висновок результату}
writeln ('Сума елементів над і під діагоналями дорівнює', sum);
end.
3.7 Інструкція користувачеві.
Програма призначена для обчислень суми елементів матриці розташованих над і під її діагоналями. Введення матриці здійснюється користувачем у зручній для людини математичній формі. Наприклад:
1 2 3
4 5 6
7 8 9
Для запуску програми потрібно набрати її ім'я (kkr1_3.exe) в командному рядку і натиснути Enter. Програма виведе коротку інформацію про власне призначення і попросити ввести розмірність матриці, яку користувач буде вводити.
Розмірність матриці повинна бути менше або дорівнює 50. Тут є особливий момент. Природно, розмірність не може бути рівною нулю або негативного числа. Тому за умов згадування цих значень програма повідомить про їх некоректності і попросить повторити введення. Можна відмовитися від введення, натиснувши будь-яку клавішу, або ввести нове значення, натиснувши Y. Крім того, якщо розмірність матриці 1 або 2, то елементів, розташованих над і під діагоналями не існує. Програма логічно видасть результат, що їх сума дорівнює нулю, при цьому не повідомляючи про відсутність таких елементів.
Після вказівки розмірності слід ввести саму матрицю. Матрицю найбільш зручно вводити наступним чином: елементи одного рядка розділяти пробілами, рядки ж - клавішею Enter. Якщо буде введено елементів більше, ніж вказано розмірністю матрицею, то такі елементи оброблятися не буде. Щоб не було непорозумінь, користувачеві виводиться матриця, з якої здійснюються обчислення.
Програма вважатиме суму необхідних елементів і видасть результат на екран. Після цього, вона завершиться.
3.8. Тестовий приклад.
Програма шукає суму елементів матриці, що знаходяться над і під її діагоналями.
Введіть розмірність матриці (K <= 50):
3
Введіть матрицю
Matrix [1,1] = 12
Matrix [1,2] = 45
Matrix [1,3] = 89
Matrix [2,1] = 74
Matrix [2,2] = 23
Matrix [2,3] = 5
Matrix [3,1] = 4
Matrix [3,2] = 15
Matrix [3,3] = 65
Ви ввели:
12 45 89
74 23 5
15 квітня 1965
Сума елементів над і під діагоналями дорівнює 60

Висновок.
Комп'ютер надає зручну можливість використання обчислювальних потужностей для вирішення трудомістких і об'ємних математичних задач. Багато задач, які раніше (до винаходу комп'ютера) або не мали рішення, або воно було дуже довгим, тепер можливо вирішувати в лічені секунди. Завдання, які не можна вирішити аналітично, можна вирішити з використанням різних чисельних методів. І тут мова Паскаль виступає як досить зручне і простий засіб для перекладу алгоритму в комп'ютерну програму, яку зможе використовувати велику кількість людей.
Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Курсова
112.2кб. | скачати


Схожі роботи:
Схема розв язування задач з комбінаторики формули
Методика розв`язування задач за допомогою пропорцій в 6 класі
Загальні питання методики розв язування складених задач
Методика розв`язування задач з теоретичних основ хімічної технології
Особливості емоційної регуляції процесу розв язування тактичних задач офіцером
Особливості методики розв язування фізичних задач у 7 8 класах 12 річної школи
Навчання школярів розв`язування логічних задач на уроках інформатики з використанням информационнокоммуникационных
Застосування векторів до розв язування простих задач на площині та в просторі Рівняння та нерів
Про графічний спосіб розв язання математичних задач
© Усі права захищені
написати до нас